package com.southminority.ethnic.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.southminority.ethnic.column.ExcelColumn;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 知识产权实体类
 * 
 * @author SouthMinority
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("intellectual_property")
public class IntellectualProperty implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 知识产权ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    @ExcelColumn(name = "知识产权ID", columnWidth = 12, value = "1", hidden = true)
    private Long id;

    /**
     * 知识产权名称
     */
    @ExcelColumn(name = "名称", columnWidth = 25, nonNull = true, value = "示例专利")
    private String title;

    /**
     * 类型：patent-发明专利，utility-实用新型，software-软件著作权，dataset-数据集，trademark-商标
     */
    @ExcelColumn(name = "类型(patent/software/dataset/...)" , columnWidth = 28, value = "patent")
    private String type;

    /**
     * 申请号
     */
    @ExcelColumn(name = "申请号", columnWidth = 20, value = "CN20250001")
    private String applicationNumber;

    /**
     * 授权号/登记号
     */
    @ExcelColumn(name = "授权号/登记号", columnWidth = 22, value = "CN-GR-0001")
    private String authorizationNumber;

    /**
     * 申请日期
     */
    @ExcelColumn(name = "申请日期", columnWidth = 18, value = "2025/01/01 00:00:00")
    private LocalDate applicationDate;

    /**
     * 授权日期
     */
    @ExcelColumn(name = "授权日期", columnWidth = 18, value = "2025/06/01 00:00:00")
    private LocalDate authorizationDate;

    /**
     * 公开日期
     */
    @ExcelColumn(name = "公开日期", columnWidth = 18, value = "2025/03/01 00:00:00")
    private LocalDate publicationDate;

    /**
     * 发明人/著作权人
     */
    @ExcelColumn(name = "发明人/著作权人", columnWidth = 25, value = "张三;李四")
    private String inventors;

    /**
     * 申请人
     */
    @ExcelColumn(name = "申请人", columnWidth = 20, value = "某大学")
    private String applicant;

    /**
     * 代理机构
     */
    @ExcelColumn(name = "代理机构", columnWidth = 20, value = "代理机构A")
    private String agent;

    /**
     * 描述/摘要
     */
    @ExcelColumn(name = "描述", columnWidth = 40, value = "描述示例")
    private String description;

    /**
     * 技术领域
     */
    @ExcelColumn(name = "技术领域", columnWidth = 25, value = "自然语言处理")
    private String technicalField;

    /**
     * 主要权利要求
     */
    @ExcelColumn(name = "主要权利要求", columnWidth = 40, value = "权利要求示例")
    private String mainClaims;

    /**
     * 分类号
     */
    @ExcelColumn(name = "分类号", columnWidth = 18, value = "G06N")
    private String classificationNumber;

    /**
     * 法律状态：pending-待审，granted-已授权，rejected-被驳回，expired-已过期
     */
    @ExcelColumn(name = "法律状态(pending/granted/...)" , columnWidth = 26, value = "pending")
    private String legalStatus;

    /**
     * 证书图片URL
     */
    @ExcelColumn(name = "证书URL", columnWidth = 40, value = "https://example.com/cert.png")
    private String certificateUrl;

    /**
     * 附件文件URLs（JSON格式）
     */
    @ExcelColumn(name = "附件URLs(JSON)", columnWidth = 40, value = "['https://example.com/a.pdf']")
    private String attachmentUrls;

    /**
     * 关键词
     */
    @ExcelColumn(name = "关键词", columnWidth = 20, value = "专利;软件")
    private String keywords;

    /**
     * 经济价值评估
     */
    @ExcelColumn(name = "经济价值", columnWidth = 20, value = "百万级")
    private String economicValue;

    /**
     * 合作转化信息
     */
    @ExcelColumn(name = "合作转化信息", columnWidth = 30, value = "可合作转化")
    private String cooperationInfo;

    /**
     * 排序
     */
    @ExcelColumn(name = "排序", columnWidth = 10, value = "0", hidden = true)
    private Integer sortOrder;

    /**
     * 是否重点知识产权：1-是，0-否
     */
    @ExcelColumn(name = "重点(1/0)", columnWidth = 12, value = "1", hidden = true)
    private Integer isFeatured;

    /**
     * 状态：1-启用，0-禁用，-1-已删除
     */
    @ExcelColumn(name = "状态(1启用/0禁用)", columnWidth = 15, value = "1", hidden = true)
    private Integer status;

    /**
     * 创建时间
     */
    @ExcelColumn(name = "创建时间", columnWidth = 25, hidden = true)
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @ExcelColumn(name = "更新时间", columnWidth = 25, hidden = true)
    private LocalDateTime updateTime;
} 
